package com.util;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;

import java.io.InputStream;

/**
 * Created by 883564
 * on 2016/4/20.
 * 图片加载类
 */
public class ImageLoad {
    /**
     * 加载图片
     * @param context 上下文
     * @param uri 图片uri
     * @param reqWidth 目标宽
     * @param reqHeight 目标高
     * @return 图片
     */
    public Bitmap load(Context context,Uri uri,int reqWidth,int reqHeight){
        Bitmap bitmap=null;
        try{
            //使用流读取图片
            InputStream inputStream=context.getContentResolver().openInputStream(uri);
            //流不能为空
            if(inputStream==null)
                return null;
            //加载参数
            BitmapFactory.Options options=new BitmapFactory.Options();
            //仅加载框架
            options.inJustDecodeBounds=true;
            //解析流
            BitmapFactory.decodeStream(inputStream,null,options);
            //关闭流
            inputStream.close();
            //获取图片高
            int imageHeight=options.outHeight;
            //获取图片宽
            int imageWidth=options.outWidth;
            //缩放比
            int inSampleSize=1;
            //如果真实图片比目标大，则应缩小
            if(imageHeight>reqHeight||imageWidth>reqWidth){
                //缩小1倍
                int halfHeight=imageHeight/2;
                int halfWidth=imageWidth/2;
                //不断缩小，直到长宽皆不大于目标为止
                while((halfHeight/inSampleSize)>reqHeight||(halfWidth/inSampleSize)>reqWidth)
                    inSampleSize++;
                //图片加载参数
                BitmapFactory.Options options1=new BitmapFactory.Options();
                //加载实际图片
                options1.inJustDecodeBounds=false;
                //图片缩放比
                options1.inSampleSize=inSampleSize;
                //获取流
                InputStream inputStream1=context.getContentResolver().openInputStream(uri);
                //流不能为空
                if(inputStream1!=null){
                    //解析流，获取图片
                    bitmap=BitmapFactory.decodeStream(inputStream1, null, options1);
                    //关闭流
                    inputStream1.close();
                }
            //如果真实图片长宽皆不大于目标，则直接加载
            }else {
                //获取流
                InputStream inputStream2=context.getContentResolver().openInputStream(uri);
                //流不为空
                if(inputStream2!=null){
                    //解析流
                    bitmap=BitmapFactory.decodeStream(inputStream2);
                    //关闭流
                    inputStream2.close();
                }
            }
        //异常捕获
        }catch(Exception e){
            e.printStackTrace();
        }
        return bitmap;
    }
}
